package opgave2;

/**
 * @author Andre Baart en Jeroen Castelein
 * @elementen 
 * 		Een rij van Keys van het type K die gelinkt zijn met Values van het type V
 * @structuur
 * 		Lineair
 * @domein
 * 		Alle rijen van paren van K, V monotoon stijgen gesorteerd op K. Elke K moet hier dan ook uniek zijn.
 * @constructor
 * 		Tabel();
 * 			<dl>
 * 				<dt><b>PRE-conditie</b><dd>-
 * 				<dt><b>POST-conditie</b><dd>De inhoud van het nieuwe Tabel-object is leeg.
 * 			</dl>
 * 		<br>
 **/

public interface TabelInterface<K extends Data, V extends Clonable> extends Clonable{
	
	/** Initialiseert het Tabel object tot de lege tabel.
     * @preconditie
     *	    -
     * @postconditie
     *	    De tabel is leeg.
     **/
	void init();
	
	/** Voegt de meegegeven key K en value V gelinkt toe aan de rij.
     * @preconditie
     *	    -
     * @postconditie
     *	    Een kopie van K en van V zijn gelinkt en toegevoegd aan de tabel. Als de tabel al de meegegeven key bevat, zal de value verandert worden.
     **/
	void add(K key, V value);
	
	/** Retourneert de value V die gelinkt is met de meegegeven key K.
     * @preconditie
     *	    De meegegeven key K zit in de tabel.
     * @postconditie
     *	    De value V die gelinkt is met de meegegeven key K is geretourneerd.
     **/
	V get(K key);
	
	/** Retourneert of de meegegeven key K in de tabel zit.
     * @preconditie
     *	    -
     * @postconditie
     *	    True - De meegegeven key K zit in de tabel.
     *		False - De meegegeven key K zit niet in de tabel.
     **/
	boolean contains(K key);
	
	/** Verwijdert de meegegeven key K en de gelinkte value V uit de tabel.
     * @preconditie
     *	    -
     * @postconditie
     *	    De meegegeven key K en de gelinkte value V zijn uit de tabel verwijderd.
     **/
	void remove(K key);
}
